package org.kairosdb.client.deserializer;
import com.google.gson.*;
import org.hamcrest.CoreMatchers;
import org.junit.Before;
import org.junit.Test;
import org.kairosdb.client.builder.RelativeTime;
import org.kairosdb.client.builder.TimeUnit;
import org.kairosdb.client.response.GroupResult;
import org.kairosdb.client.response.grouping.*;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.Matchers.hasItems;
import static org.junit.Assert.assertThat;
public class GroupByDeserializerTest
{
private Gson gson;
@Before
public void setup()
{
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(GroupResult.class, new GroupByDeserializer());
gson = builder.create();
}
@Test(expected = JsonParseException.class)
public void test_missingName_invalid()
{
JsonObject json = new JsonObject();
json.add("value", new JsonPrimitive(5));
new GroupByDeserializer().deserialize(json, null, null);
}
@Test
public void test_tag_grouper()
{
TagGroupResult result = (TagGroupResult) gson.fromJson("{'name': 'tag', 'tags': ['host'], 'group': {'host': 'server1'}}", GroupResult.class);
assertThat(result, instanceOf(TagGroupResult.class));
assertThat(result.getName(), equalTo("tag"));
assertThat(result.getTags(), hasItems("host"));
assertThat(result.getGroup().get("host"), equalTo("server1"));
}
@Test
public void test_time_grouper()
{
String json = "{'name':'time','range_size':{'value':1,'unit':'MILLISECONDS'},'group_count':5,'group':{'group_number':2}}";
TimeGroupResult result = (TimeGroupResult) gson.fromJson(json, GroupResult.class);
assertThat(result, instanceOf(TimeGroupResult.class));
assertThat(result.getName(), equalTo("time"));
assertThat(result.getGroupCount(), equalTo(5));
assertThat(result.getGroup().getGroupNumber(), equalTo(2));
assertThat(result.getRangeSize(), equalTo(new RelativeTime(1, TimeUnit.MILLISECONDS)));
}
@Test
public void test_value_grouper()
{
String json = "{'name':'value','range_size':100,'group':{'group_number':0}}";
ValueGroupResult result = (ValueGroupResult) gson.fromJson(json, GroupResult.class);
assertThat(result, instanceOf(ValueGroupResult.class));
assertThat(result.getName(), equalTo("value"));
assertThat(result.getGroup().getGroupNumber(), equalTo(0));
assertThat(result.getRangeSize(), equalTo(100));
}
@Test
public void test_bin_grouper()
{
String json = "{'name': 'bin', 'bins': [5, 10, 20],'group': {'bin_number': 1}}";
BinGroupResult result = (BinGroupResult) gson.fromJson(json, GroupResult.class);
assertThat(result, instanceOf(BinGroupResult.class));
assertThat(result.getName(), equalTo("bin"));
assertThat(result.getBinNumber(), equalTo(1));
assertThat(result.getBins(), hasItems(5.0, 10.0, 20.0));
}
@Test
public void test_unknown_grouper()
{
CustomGroupResult result = (CustomGroupResult) gson.fromJson("{'name': 'bogus', 'value': 5}", GroupResult.class);
assertThat(result, instanceOf(CustomGroupResult.class));
assertThat(result.getName(), equalTo("bogus"));
assertThat(result.getProperties().get("value"), CoreMatchers.<Object>equalTo(5.0));
}
}